স্ট্যান্ডার্ড ইনপুট/আউটপুট বাফারিং হলো এমন একটি প্রক্রিয়া যা ডেটা আদান-প্রদান (ইনপুট/আউটপুট) দ্রুত করার জন্য ব্যবহৃত হয়। বাফারিংয়ের মাধ্যমে ইনপুট/আউটপুট অপারেশনগুলোকে মেমোরিতে সাময়িকভাবে ধরে রাখা হয়, যাতে একবারে বৃহৎ পরিমাণ ডেটা পাঠানো বা গ্রহণ করা যায় এবং এতে প্রোগ্রামের পারফরম্যান্স উন্নত হয়।
সি প্রোগ্রামিং ভাষায় বাফারিং সাধারণত তিনভাবে কাজ করে:
লাইনে বাফারিংয়ে ডেটা newline (নতুন লাইন) ক্যারেক্টার ('\n'
) আসা পর্যন্ত বাফারে ধরে রাখা হয় এবং newline এলে ডেটা পাঠানো হয় বা আউটপুটে প্রদর্শিত হয়। সাধারণত, স্ট্যান্ডার্ড ইনপুট (stdin
) এবং স্ট্যান্ডার্ড আউটপুট (stdout
) লাইনে বাফারিং অনুসরণ করে।
উদাহরণ: নিচের উদাহরণে printf()
ফাংশন ব্যবহার করে আউটপুট প্রদর্শন করা হয়েছে, যা লাইনে বাফারিংয়ের মাধ্যমে কাজ করে।
#include <stdio.h>
int main() {
printf("Hello, World!\n"); // newline আসলে আউটপুট পাঠানো হবে
return 0;
}
পূর্ণ বাফারিংয়ে ডেটা বাফারে জমা থাকে যতক্ষণ না বাফার পূর্ণ হয়। বাফার পূর্ণ হলে, এটি একবারে আউটপুট ডিভাইসে পাঠানো হয়। fopen()
ফাংশন ব্যবহার করে ফাইল খোলার সময় পূর্ণ বাফারিং অনুসরণ করা হয়।
উদাহরণ: নিচের উদাহরণে ফাইলে লেখা পূর্ণ বাফারিং অনুসরণ করে, যা ফাইল ক্লোজ করলে বা বাফার পূর্ণ হলে ডেটা ফাইলে লেখা হয়।
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
fprintf(file, "Hello, World!\n"); // পূর্ণ বাফারিং অনুসরণ করে
fclose(file); // ফাইল বন্ধ করলে ডেটা ফাইলে পাঠানো হবে
return 0;
}
অবাফারিংয়ে কোনো বাফার ব্যবহৃত হয় না, অর্থাৎ প্রতিটি ইনপুট বা আউটপুট অপারেশন সাথে সাথেই ইনপুট বা আউটপুট ডিভাইসে পাঠানো হয়। stderr
স্ট্যান্ডার্ড এরর স্ট্রীমটি সাধারণত অবাফারিং করে থাকে, কারণ ত্রুটির তথ্য সাথে সাথেই দেখানো গুরুত্বপূর্ণ।
উদাহরণ: নিচের উদাহরণে fprintf()
ব্যবহার করে ত্রুটি মেসেজ প্রদর্শন করা হয়েছে, যা অবাফারড অপারেশন।
#include <stdio.h>
int main() {
fprintf(stderr, "An error occurred!\n"); // সাথে সাথেই আউটপুট প্রদর্শিত হবে
return 0;
}
setbuf()
এবং setvbuf()
setbuf()
এবং setvbuf()
ফাংশনগুলো ব্যবহার করে আমরা ফাইল স্ট্রীমের বাফারিং মোড নির্ধারণ করতে পারি।
setbuf(FILE *stream, char *buffer);
stream
: ফাইল পয়েন্টার।buffer
: যদি NULL
দেওয়া হয়, তবে ফাইল স্ট্রীম অবাফারড হয়ে যাবে।setvbuf(FILE *stream, char *buffer, int mode, size_t size);
stream
: ফাইল পয়েন্টার।buffer
: বাফার (যদি NULL
দেওয়া হয় তবে অবাফারড)।mode
: তিন ধরনের মোড হতে পারে: _IONBF
(No Buffering), _IOLBF
(Line Buffering), _IOFBF
(Full Buffering)।size
: বাফারের আকার।উদাহরণ: setvbuf()
ফাংশন ব্যবহার করে লাইনে বাফারিং নির্ধারণ।
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file.\n");
return 1;
}
setvbuf(file, NULL, _IOLBF, 0); // লাইনে বাফারিং নির্ধারণ করা
fprintf(file, "Hello, World!\n");
fclose(file);
return 0;
}
বাফারিং প্রকার | বর্ণনা | উদাহরণ |
---|---|---|
লাইনে বাফারিং | ডেটা newline এলে পাঠানো হয় | printf() এর মাধ্যমে |
পূর্ণ বাফারিং | বাফার পূর্ণ হলে ডেটা পাঠানো হয় | ফাইল লেখার সময় |
অবাফারিং | ডেটা সাথে সাথেই পাঠানো হয় | stderr ত্রুটি মেসেজ |
স্ট্যান্ডার্ড ইনপুট/আউটপুট বাফারিং সি প্রোগ্রামিংয়ে ইনপুট/আউটপুট অপারেশন দ্রুত করার জন্য ব্যবহৃত হয়। এর মাধ্যমে কার্যকারিতা বাড়ানো এবং CPU এবং I/O ডিভাইসের মধ্যে সঠিক সিঙ্ক্রোনাইজেশন নিশ্চিত করা যায়।
common.read_more